﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Business.Entities;
using Business.Logic;
using System.Text.RegularExpressions;

namespace UI.Desktop
{
    public partial class UsuariosDesktop : MdiFormPadre
    {
        //acordarse de actualizar el usr del formulario padre xq sino la cagamos....

        private static bool validarEmail(string email)
        {
            return Regex.IsMatch(email,
                  @"^(?("")("".+?""@)|(([0-9a-zA-Z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-zA-Z])@))" +
                  @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,6}))$");
        }

        Usuario _UsuarioActual;
        Persona _PersonaActual;

        public Usuario UsuarioActual
        {
            get { return _UsuarioActual; }
            set { _UsuarioActual = value; }
        }

        public Persona PersonaActual
        {
            get { return _PersonaActual; }
            set { _PersonaActual = value; }
        }

        public UsuariosDesktop(Usuario usr, Persona per)
        {
            InitializeComponent();
            UsuarioActual = usr;
            PersonaActual = per;
        }
      
        #region Eventos

        private void Usuarios_Load(object sender, EventArgs e)
        {
            lAclaración.Text += "\nCada vez que edite sus datos deberá "+
                "cambiar la clave para mayor seguridad.";
            txtUsuario.Text = UsuarioActual.NombreUsuario.Trim();
            txtApellido.Text = UsuarioActual.Apellido.Trim();
            txtEmail.Text = UsuarioActual.EMail.Trim();
            txtNombre.Text = UsuarioActual.Nombre.Trim();
            lClave.Visible = false;
            lRepetirClave.Visible = false;
            txtClave.Visible = false;
            txtRepetirClave.Visible = false;
        }

        private void tsbEditar_Click(object sender, EventArgs e)
        {
            this.HabilitarControles();
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                if (this.Validar() == true)
                {
                    UsuarioActual.EMail = txtEmail.Text.Trim();
                    UsuarioActual.NombreUsuario = txtUsuario.Text.Trim();
                    UsuarioActual.Clave = txtClave.Text.Trim();
                    PersonaActual.Email = txtEmail.Text.Trim();
                    UsuarioLogic UsLogic = new UsuarioLogic();
                    UsLogic.Save(UsuarioActual, PersonaActual);
                    this.DeshabilitarControles();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        #endregion


        #region Metodos

        private void HabilitarControles()
        {
            txtEmail.Enabled = true;
            txtUsuario.Enabled = true;
            lClave.Visible = true;
            lRepetirClave.Visible = true;
            txtClave.Visible = true;
            txtClave.Visible = true;
            txtRepetirClave.Visible = true;
            btnGuardar.Visible = true;
            lActCorrecta.Visible = false;
        }

        private void DeshabilitarControles()
        {
            txtEmail.Enabled = false;
            txtUsuario.Enabled = false;
            lClave.Visible = false;
            lRepetirClave.Visible = false;
            txtClave.Visible = false;
            txtClave.Visible = false;
            txtRepetirClave.Visible = false;
            btnGuardar.Visible = false;
            lActCorrecta.Visible = true;
        }

        private bool Validar()
        {
            string Mensaje = "";
            if (!validarEmail(txtEmail.Text))
            {
                Mensaje += "- El Email no corresponde a una direccón de correo válida.\n";
            }
            if (txtUsuario.Text.Trim() == "")
            {
                Mensaje += "- El campo Usuario esta vacío.\n";
            }
            if (txtClave.Text.Length < 8)
            {
                Mensaje += "- La clave debe contener al menos 8 caracteres.\n";
            }
            if (txtRepetirClave.Text.Trim() != txtClave.Text.Trim())
            {
                Mensaje += "- Los campos Clave y Repetir Clave son diferentes.\n";
            }
            if (txtClave.Text.Trim() == UsuarioActual.Clave)
            {
                Mensaje += "- Su clave actual es igual a su clave anterior, por favor modifíquela.\n";
            }
            ValidacionesEspeciales valEspeciales = new ValidacionesEspeciales();
            if (valEspeciales.TipoValidacion(ValidacionesEspeciales.Tipos.esMenor50, txtEmail.Text.Trim()) == false)
            {
                Mensaje += "- La cantidad de caracteres en el campo Email debe ser menor o igual a 50.\n";
            }
            if (valEspeciales.TipoValidacion(ValidacionesEspeciales.Tipos.esMenor50, txtUsuario.Text.Trim()) == false)
            {
                Mensaje += "- La cantidad de caracteres en el campo Usuario debe ser menor o igual a 50.\n";
            }
            if (valEspeciales.TipoValidacion(ValidacionesEspeciales.Tipos.esMenor50, txtClave.Text.Trim()) == false)
            {
                Mensaje += "- La cantidad de caracteres en el campo Clave debe ser menor o igual a 50.\n";
            }
            if (Mensaje == "")
            {
                return true;
            }
            else
            {
                MessageBox.Show(Mensaje, "Validación de datos ingresados", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return false;
            }

        }

        private void BuscarUsuarioActual()
        {
            try
            {
                UsuarioLogic UsrActualLogic = new UsuarioLogic();
                UsuarioActual = UsrActualLogic.GetOne(UsuarioActual.ID);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void BuscarPersonaActual()
        {
            try
            {
                UsuarioLogic UsrActualLogic = new UsuarioLogic();
                PersonaActual = UsrActualLogic.GetOnePersona(PersonaActual.ID);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        #endregion 
    }
}
